<?php defined('SYSPATH') OR die('No direct access allowed.');

/**
 * Поддержка Smarty. Добавляет проверку авторизации через requireAuth, используется в подклассах.
 * Автоматически получает используемый на сайте layout из конфига config/view.php
 * 
 * @author Михаил Елфимов (www.elfimov.com)
 */
class Controller extends Template_Controller {

	/**
	 * @var boolean Надо ли проверять авторизацию пользователя. Переопределяется в подклассах
	 */
	protected $requireAuth = FALSE;
	
	/**
	 * Инициализация Smarty, layout, проверка авторизации
	 */
	function __construct() {
		$layout = Kohana::config('view.layout');
		if ($layout && 'template' == $this->template) {
			$this->template = 'layouts/'.$layout;
		}

		parent::__construct();

		if (Kohana::config('smarty.integration') == TRUE) {
			$this->MY_Smarty = new MY_Smarty;
		}

		if ($this->requireAuth) {
			$this->checkAuth();
		}
	}

	/**
	 * Проверка авторизации. Выдает ошибку для AJAX, либо переводит на главную страницу
	 */
	protected function checkAuth() {
		if (!fb::isLoggedIn()) {
			if (request::is_ajax()) {
				ajax::error('You are not authorized to access this page');
			}
			else {
				url::redirect('/');
			}
		}
	}

	/**
	 * Переопределение стандартного метода вывода шаблона
	 */
	public function _kohana_load_view($template, $vars) {
		if ($template == '') {
			return;
		}

		if (substr(strrchr($template, '.'), 1) === Kohana::config('smarty.templates_ext')) {
			// Assign variables to the template
			if (is_array($vars) AND count($vars) > 0) {
				foreach ($vars AS $key => $val) {
					$this->MY_Smarty->assign($key, $val);
				}
			}

			// Send Kohana::instance to all templates
			$this->MY_Smarty->assign('this', $this);

			// Fetch the output
			$output = $this->MY_Smarty->fetch($template);

		}
		else {
			$output = parent::_kohana_load_view($template, $vars);
		}

		return $output;
	}

}  // Controller
